1. Field of the Invention
This invention relates to the arts of enterprise application servers, and especially to the technologies of extensible communications libraries available to applications being executed by an application server.
2. Description of the Related Art
Application servers are prevalent throughout business, scientific and entertainment industries, as they provide everything from “back office” automation such as billing, accounting, and order entry functions; to customer interface functions such as allowing clients to place orders directly into a suppliers computers, reserve products or services, and manage their own accounts; to online entertainment and gaming systems which allow customers to access games and useful information in trade for being presented marketing information, banner advertisements, and sponsored hyperlinks. As such, application servers may communicate with client computers via a corporate intranet or private computer network, via a publicly accessible network such as the Internet, or both.
An application server is a server computer and one or more programs that provides the logic for an online or automated application, and is typically part of a larger, distributed computing system. Application servers are often modeled as a component of a three-tier system having a graphical user interface (GUI) server, an application or business logic server, and a database server.
One such application server is the WebSphere [TM] product from International Business Machines. WebSphere is available for a number of platforms, including computers from personal computers to high-end “main frames” running operating systems ranging from Microsoft Windows NT [TM], to IBM's AIX [TM], to the open source Linux.
A WebSphere application server provides an environment for open distributed computing. Users and processes on a wide variety of platforms can interact by using the facilities provided by WebSphere. A common method of organizing software to run on distributed systems is to separate functionality into two parts: clients and servers. A client is system that runs one or more programs and uses services provided by server systems, the server systems themselves running one or more server programs. The client system makes a request for a service to the server system, and a server system performs that service on behalf of the client system.
For many applications, the application server cooperates with or even incorporates a Web server, such as a hyper text transfer protocol (HTTP) server, for communicating with web browser computers as the client computers. In such an instance, the application server is often referred to as a “Web Application Server” or “Web Server”. In this configuration, a web browser client allows the user interface to be implemented in the well-known hyper text markup language (HTML). A typical web server provides one or more well-known methods to forward a request to an application server and to return information to the user, including: Common Gateway Interface (CGI), Microsoft's [TM] Active Server Pages (ASP), Java Server Pages (JSP), or even the more advanced Common Object Request Broker Architecture (CORBA).
Server system functionality usually includes “resource management”, through which a server synchronizes and manages access to one or more “resources” such as databases or database servers. Client requests are received by the server system, processed, and appropriate accesses to the resources are made. A response to the client system is then created and transmitted to the client system. This general model is applicable to many server paradigms, including online banking, order entry and tracking, e-commerce, and even electronic mail processing.
Client programs typically handle user interactions, such as presenting drop down lists, menus, pages of information, and “playing” animated graphics or audio. Client programs also typically include functionality to request data or to initiate some data modification on behalf of a user by the server system. For example, a client system can display a form on which a user can enter orders for a product. The client may then transmit this order information to a server system, which checks a product database and performs tasks needed for billing and shipping.
In many cases, a single server system is used by multiple clients simultaneously. For example, dozens or hundreds of clients can interact with a handful of servers that control database access.
A common model of client/server systems, shown in FIG. 1, uses three tiers: one or more client systems (10) that interact with the users, one or more application servers (12) that contain the business logic of the applications provided to the users, and one or more resource managers (13) and associated data stores (14) that store and retrieve data.
In this model, the network (11) between the clients and the servers (12) may be a corporate local area network (LAN) or intranet, such as in the case of a corporate application server which is not publicly accessible. In this case, the client systems may be provided with any specific software programs, such as IBM's Lotus Notes, which cooperates with the application server programs. For applications which are intended for widespread use or public use, the network (11) may be the Internet, the client computers may be equipped with appropriate web browser software such as Netscape's Navigator [TM], and the application servers are equipped with appropriate HTTP server software, such as the IBM WebSphere product.
The interfaces between the servers (12) and the resource manager(s) (13) may be LAN, Internet, or a proprietary interface. The data stores and databases (14) may be physically housed in separate platforms, or may be integrated to the resource managers (13). In some cases, the resource managers, databases, and application servers may be software processes all executing on the same platform, too.
Using this arrangement of systems and functionality, the client systems (10) are isolated from having to know anything about the actual resource managers (13) and resources (14). It needs only to have the capability to communicate and interact with the server systems (12), and does not have to have specific capabilities or software to communicate directly with the resources (14). This allows a service provider to make changes to the resource tier of the arrangement without requiring changes to the client systems.
For example, a bank may install a new system of databases for online loan processing. With this arrangement, an HTML web browser client computer may be enabled to access these new databases and online loan services through changes to the server computer programs only, without need for changes to the client computer. Since most servers are relatively few in number compared the to vast number of client computers (and potential client computers) they server, this is an significant advantage of the arrangement. Additionally, the resource manager can be assigned the task of security and access control such that users requesting secure data from the resources may be allowed or denied access to that data.
Because there is often need to rapidly develop and deploy in the market place new business applications and enhancements to existing business applications, there are several “standards” with which most application servers are compatible. This allows the business application program developers to work within programming and computing environments in which they are familiar, regardless of which specific application server platform will eventually execute the application.
In recent years, Sun Microsystems' Java [TM] programming language and programming environment have gained widespread acceptance and use due to its portability between a wide variety of platforms, and due to its object oriented methodology.
Java client programs, or “applets”, can be delivered by a server computer to a client computer using common protocols such as HTTP, with links to retrieve the applets embedded in forms or web pages. Server programs are often implemented as a collection of “servlets”.
Recently, Sun Microsystems has extended the definition of the general Java environment to include more enterprise and distributed computing functionality, called Java platform Version 2 Enterprise Edition (J2EE). J2EE supports the 3-tiered model of client-server-resource manager, as previously described. The J2EE platform is a platform for hosting J2EE applications specified as a set of required application program interfaces (APIs) and policies. The J2EE specifications and documentation are readily available from Sun Microsystems, and J2EE is well-known by those skilled in the art.
One of the features or benefits of adopting the J2EE platform as a programming model for an application server, or at least as a programming model with which to be compliant or compatible, is the Java Messaging Services (JMS) structure of the J2EE platform.
Whereas enterprise messaging is recognized as an essential capability for building enterprise applications quickly and efficiently, JMS combines the Java programming methodology with enterprise messaging through a JMS API. JMS enterprise messaging provides a reliable, flexible service for the asynchronous exchange of critical business data and events throughout an enterprise and between applications, resources, and clients.
A JMS application has several parts, including at least one “JMS provider”, one or more “JMS clients”, a plurality of “JMS messages”, a set of “administered objects”, and possibly some non-JMS clients.
A JMS provider is a messaging product which implements the standard JMS interfaces, and it provides control and administrative functions. JMS clients are components and application programs which produce and/or consume JMS messages. JMS messages are objects for communicating information and data between JMS clients, and administered objects are pre-configured JMS objects for the use of clients (e.g. JMS objects under administrator control rather than developer control).
The JMS interfaces, parts and methodology are well known in the art, and the specifications are readily available from Sun Microsystems [TM].
The application programming interface (API) specification for JMS defines two “domains” for types of messaging—point-to-point (PTP) and publish/subscribe. It requires a J2EE provider to implement both messaging types or domains. A PTP messaging product allows a message producer to specify a specific queue for holding the message, and message consumers may specify a certain queue to hold their messages. This allows a very deterministic communications path to be established. The publish/subscribe messaging domain is more useful for broadcast messages and point-to-multipoint types of data services, where the data producer is less aware of one or more consuming clients which may be receiving the information. This allows for more anonymity between the producers and consumers, as well. Both types of messaging are well-known in the art, and are fully described by the readily available JMS specifications.
A generalized illustration of the JMS API programming model (20) is shown in FIG. 2. Destinations (26, 29) and connection factories (21) are typically administered objects, e.g. objects under the control of an administrator rather than an application developer. As JMS clients access the factories and destinations through the JMS API, the JMS clients are portable from one JMS implementation to another regardless of the specifics of the implementation of the JMS API. JMS clients must simply “look up” the administered objects using the Java Naming and Directory Interface (JNDI) after the administered objects have been placed in the application server's namespace by the administrator.
A connection factory (21) is used by a client to create a connection with a provider, and it encapsulates a set of connection configuration parameters defined by the administrator. The destinations (26, 29) are objects to which JMS client message producers (24) may output or write messages, and from which JMS client message consumers (28) may input or read messages. In a point-to-point messaging scheme, the destination(s) are configured as queues, and in a publish/subscribe messaging scheme, the destinations are configured or referred to as “topics”.
A connection (22) encapsulates a virtual connection with a JMS provider, such as an open Transmission Control Protocol/Internet Protocol (TCP/IP) connection between a JMS client and provider service daemon or process. A single connection can be used to create one or more sessions (25), which are eventually closed with when the connection is closed.
A session (22) is a single instance of a communication path for producing and consuming messages. For example, a TCP/IP connection can be created with 4 sessions, so that each session operates as a single, independent TCP/IP communication path between message producers and message consumers.
The J2EE specification mandates that compliant application server products must support the use of JMS resources by the applications that run in the server. Currently available J2EE application server products support some form of built in JMS support library, but these libraries are limited to one preselected JMS library from one particular JMS provider. Due to the variety of implementations of the JMS libraries, and the typical tradeoffs involved in optimizing a set of functions for one purpose or another, each JMS library has an inherent set of advantages and disadvantages.
In an environment for an application which is not running on an enterprise application server, an application may link directly to a JMS library, and thus can easily be recombined with alternate JMS libraries through the JMS API. However, when applications are run on a enterprise application server, applications (31) do not directly link to any server resources, but are indirectly linked to server resources including a JMS library (33) by the application server (32) itself, as shown in FIG. 3.
There are several third party vendors that supply messaging products which support the JMS specification for application servers, but unfortunately, these JMS providers cannot be easily integrated with other currently available J2EE application servers, especially by an end-user of the enterprise application server suite.
For example, IBM's MQSeries JMS implementation has gained a reputation in the user community for strong affinity with mainframe computers, and for having good support for global transactions. As such, the IBM WebSphere product was initially offered pre-integrated with MQSeries only. However, a certain customer may desire to use a competitive JMS implementation library, such as the Sonic MQ library, which is reputed for lightweight and fast messaging service, but not particularly well suited for global transactions. But, this certain customer may need for a specific application the quickness of the Sonic MQ library, and may not need the mainframe support of the MQSeries. This, then, becomes a critical decision factor in whether or not to purchase the entirety of the WebSphere enterprise server product for that certain customer.
Other application server products currently offered on the market are also pre-configured with a preselected JMS library of the supplier's choice, not the user's choice. As such, one significant marketing and technical factor for evaluation when selecting a application server product to use is the JMS library it provides. This unnecessarily complicates the decision process of which application server to use, and may limit the potential customer base for an application server based upon which JMS library is included with the server suite software.
Further, a customer may purchase one application server suite including an acceptable JMS library at one time, and then sometime later after communications requirements have changed or evolved, find that the purchased application server's JMS library does not meet the needs of the future applications.
Therefore, there is a need in the art for a system and method which allows an application server to integrate and make use of any messaging product that supports the JMS interfaces. Further, there is a need in the art for a system and method which supports not only one, but multiple JMS libraries within a single server such that each application can selectively use library functions in an optimal manner.